# CentOS安装oracle 11g步骤

# 前期准备工作

#服务器命名(不能有减号(-))
hostname <SERVER_NAME>  ## hostname dsdbm   <direct selling database main>

vi /etc/hosts
#####在文件末尾增加如下内容 开始#####
ip <SERVER_NAME>  ## 10.100.0.3 dsdbm
#####在文件末尾增加如下内容 结束#####

#服务器时区时间设置
yum install chrony ##安装时间日期软件包
systemctl start chronyd  ##启动时间日期软件
systemctl enable chronyd  ##开机启动
timedatectl set-timezone Asia/Shanghai ##设置北京时区
timedatectl set-ntp yes #启用ntp同步
timedatectl ##查看详细时区日期时间
# 安装必要的软件包
yum -y install libaio-devel-*.i686* compat-libstdc++-*.i686*

yum -y install binutils-* compat-libstdc++* compat-libcap1* gcc-4.4.4-*  libstdc++-devel-4.*

yum -y install libstdc++*  sysstat-* make-* libgcc-* libaio-* ksh-* glibc-devel-*

yum -y install binutils compat-libstdc elfutils-libelf  elfutils-libelf-devel elfutils-libelf-devel-static gcc gcc-c++ glibc glibc-common glibc-devel 

yum -y install binutils glibc-headers kernel-headers libaio libaio-devel libgcc libgomp libstdc++ libstdc++-devel libXau-devel libXp libXp-devel make 

yum -y install sysstat unixODBC unixODBC-devel unixODBC-libs util-linux libXp-1.0.2-2.1.el6.i686 libXp-devel-1.0.2-2.1.el6.i686 libXt-1.1.4-6.1.el6.i686

yum -y install glibc-devel-2.12-1.192.el6.i686 libXtst libXtst-1.2.2-2.1.el6.i686 libstdc++.so.5 compat-libstdc++-33 install libXp.so.6 libstdc++.so.5

yum -y install libXtst-1.2.2-2.1.el7*86 libXt* libXp* libstdc++* libXt-1.1.4-6.1.el6*686 libXp*686 libXt*686 libxtst*686

# 创建账号和目录,授权

# 创建软件目录
mkdir -p /u01/soft ## 用于存放下载的软件p13390677_112040_Linux-x86-64_1of7.zip等
# 下载软件
scp -P 222 root@xxx.xxx.xx.xx:/u01/soft/p13390677_112040_Linux-x86-64_1of7.zip /u01/soft

scp -P 222 root@xxx.xxx.xx.xx:/u01/soft/p13390677_112040_Linux-x86-64_2of7.zip /u01/soft

# 下载附加脚本
scp -P 222 root@xxx.xxx.xx.xx:/u01/soft/rman.sh /u01/soft
scp -P 222 root@xxx.xxx.xx.xx:/u01/soft/xdump.par /u01/soft
scp -P 222 root@xxx.xxx.xx.xx:/u01/soft/xdump.sh /u01/soft
scp -P 222 root@xxx.xxx.xx.xx:/u01/soft/xdb_inst.rsp /u01/soft

# 解压软件
unzip p13390677_112040_Linux-x86-64_1of7.zip
unzip p13390677_112040_Linux-x86-64_2of7.zip

#复制安装脚本到相应目录
cp /u01/soft/xdb_inst.rsp /u01/soft/database/response/

mkdir -p /u01/oracle ##oracle的安装目录

# 创建安装目录里必要的目录(/u01/oracle)
mkdir -p /u01/oracle/product/11.2.0/db_1
mkdir -p /u01/oracle/oraInventory
# 创建数据存放、归档和备份目录(/home/oradata)
mkdir -p /home/oradata/archivelog
mkdir -p /home/oradata/xdump
mkdir -p /home/oradata/datas
mkdir -p /home/oradata/fra
mkdir -p /home/oradata/rman

#复制备份脚本到相应目录
cp /u01/soft/rman.sh /home/oradata/rman/
cp /u01/soft/xdump.par /home/oradata/xdump/
cp /u01/soft/xdump.sh /home/oradata/xdump/
# 创建oracle用户和组(oinstall,dba,oper)
groupadd -g 600 oinstall
groupadd -g 601 dba
groupadd -g 602 oper
useradd -u 600 -g oinstall -G dba,oper oracle
# 授权目录(/u01,/home/oradata)
chown -R oracle:oinstall /u01
chmod -R 775 /u01

chown -R oracle:oinstall /home/oradata
chmod -R 775 /home/oradata

# 配置oracle用户环境

# 配置oracle用户打开进程数和文件数限制
vi /etc/security/limits.conf
#####在文件末尾增加如下内容 开始#####
oracle    soft    nproc    2047   ##进程数发出警告条件
oracle    hard    nproc    16384  ##进程数最大限制数
oracle    soft    nofile    1024  ##文件数
oracle    hard    nofile    65536 ##文件数
oracle    soft    stack    10240
#####在文件末尾增加如下内容 结束#####

# 配置oracle环境变量
su - oracle
vi .bash_profile
#######在export PATH前增加内容 开始#######
export PS1="`/bin/hostname -s`-> "
export EDITOR=vi
export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_BASE=/u01/oracle
export ORACLE_HOME=/u01/oracle/product/11.2.0/db_1
export ORACLE_SID=<ORACLE_SID>  ## dsdb
#export GG_HOME=/home/ggs
export PATH=$ORACLE_HOME/bin:/home/ggs:/usr/sbin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"
######在export PATH前增加内容 结束########

# 安装oracle软件

# 进入oracle用户环境
su - oralce

# 安装脚本修改(xdb_inst.rsp即是db_install.rsp)
vi /u01/soft/database/response/xdb_inst.rsp
###开始####
ORACLE_HOSTNAME=<SERVER_NAME>   ## dsdbm
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/u01/oracle/oraInventory
SELECTED_LANGUAGES=en
ORACLE_HOME=/u01/oracle/product/11.2.0/db_1
ORACLE_BASE=/u01/oracle

oracle.install.db.DBA_GROUP=dba
oracle.install.db.OPER_GROUP=oper

oracle.install.db.config.starterdb.globalDBName=<ORACLE_SID>  ##dsdb
oracle.install.db.config.starterdb.SID=<ORACLE_SID>  ##dsdb 

oracle.install.db.config.starterdb.fileSystemStorage.dataLocation=/home/oradata/datas
oracle.install.db.config.starterdb.fileSystemStorage.recoveryLocation=/home/oradata/fra
###结束####

# 进入软件目录
cd /u01/soft/database
# 静默安装(如果失败则修复bug再执行静默安装)
./runInstaller -silent -ignoreSysPrereqs -showProgress -responseFile /u01/soft/database/response/xdb_inst.rsp
# 安装完成,查看状态
lsnrctl status
# 启动数据库
lsnrctl start ## lsnrctl stop 停止数据库
# 查看数据库配置tnsnames.ora和监听文件listener.ora,修改端口
cd /u01/oracle/product/11.2.0/db_1/network/admin/
ls -ltr
# telnet 测试
yum -y install net-tools
telent ip port

# 配置防火墙

以下是表示10.3.0.x和10.100.0.x这两个ip段的ip都可以访问,多个ip用英文逗号隔开,开放端口是1521

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source 
address="10.3.0.0/24,10.100.0.0/24" port protocol="tcp" port="1521" accept'

对所有ip开放1521端口

firewall-cmd --permanent --add-port=1521/tcp

修改后需要重载配置或重启防火墙才生效

# 重启防火墙或重新加载
systemctl restart firewalld ## firewall-cmd --reload

# 还原数据库

su - oracle
sqlplus / as sysdba
###sqlplus>>>
# 创建directory
select * from dba_directories;
create directory xdump as '/home/oradata/xdump';
# 创建tablespace
select * from dba_tablespaces;
create tablespace <tablespace_name> logging datafile '/home/oradata/datas/<oracle_sid>/<tablespace_name>.dbf' size 5120m autoextend on next 100m extent management local;
# 创建用户
create user <username> identified by <password> default tablespace <tablespace_name>;
# 授权账户
grant resource,connect,dba to <username>;
###sqlplus>>>
# 导入数据库
impdp <username>/<password> directory=xdump dumpfile=<bak_file>.dump logfile=<bak_file>.log remap_tablespace=<old_tablespace>:<new_tablespace> remap_schema=<old_schema(old_username)>:<new_schema(new_username)> table_exists_action=append & 

# 定时备份(rman)

  1. 备份脚本

    su - oracle 
    vi /home/oradata/rman/rman.sh
    ###rman.sh<<<
    
    #!/bin/bash
    BACKUP_TYPE=$1
    source /home/oracle/.bash_profile
    echo 'Current time:'`date "+%F %H:%M:%S"`
    #backup full database
    if test $BACKUP_TYPE -eq 0; then
    echo '=================================================================================================================='
    echo 'backup full database'
    /u01/oracle/product/11.2.0/db_1/bin/rman target / <<EOF
    run {
    allocate channel c1 type disk maxpiecesize=15g;
    backup full database tag 'dbfull' format '/home/oradata/rman/datafile_%d_%T_%t_%s_%p.dbf';
    backup incremental level 0 archivelog all tag 'level0' format '/home/oradata/rman/archivelog_%d_%T_%t_%s_%p.log';
    release channel c1;
    crosscheck backup;
    delete noprompt obsolete;
    crosscheck archivelog all;  
    delete expired archivelog all;
    }
    exit;
    EOF
    fi
    
    #backup incremental archivelog
    if test $BACKUP_TYPE -eq 1; then
    echo '=================================================================================================================='
    echo 'backup archivelog for level 1'
    /u01/oracle/product/11.2.0/db_1/bin/rman target / <<EOF
    run {
    allocate channel c1 type disk maxpiecesize=2g;
    backup incremental level 1 archivelog all tag 'level1' format '/home/oradata/rman/archivelog_%d_%T_%s_%p.log';
    release channel c1;
    crosscheck archivelog all;  
    delete expired archivelog all;
    }
    exit;
    EOF
    fi
    echo 'Backup Finish.'
    
    ###rman.sh>>>
    
  2. 全量备份设置

    su - oracle
    /bin/bash /home/oradata/rman/rman.sh 0 >> /home/oradata/rman/rman.log 2>&1 & 
    
    # 定时任务 每周3、6的1点启动全量备份
    crontab -e
    ###crontab -e<<<
    0 1 * * 3,6 /bin/bash /home/oradata/rman/rman.sh 0 >> /home/oradata/rman/rman.log 2>&1 &
    ###crontab -e>>>
    
  3. 增量备份设置

    su - oracle
    /bin/bash /home/oradata/rman/rman.sh 1 >> /home/oradata/rman/rman.log 2>&1 &
    
    # 定时任务 每周日、1、2、4、5的1点启动增量备份。
    crontab -e
    ###crontab -e<<<
    0 1 * * 0,1,2,4,5 /bin/bash /home/oradata/rman/rman.sh 1 >> /home/oradata/rman/rman.log 2>&1 &
    ###crontab -e>>>
    

# 定时备份(expdp)

  1. 备份脚本(xdump.par & xdump.sh)

    su - oracle
    # 创建xdump.par文件
    vi /home/oradata/xdump/xdump.par
    
    ###xdump.par<<<
    directory=xdump 
    dumpfile=dsdb_data.dump 
    logfile=dsdb_data.log  
    schemas=<schema_name>  ## username
    EXCLUDE=TABLE:"IN ('API_LOG','XXX_bak')" #要排除的表名
    ###xdump.par>>>
    
    su - oracle
    # 创建xdump.sh文件
    vi /home/oradata/xdump/xdump.sh
    
    ###xdump.sh<<<
    #!/bin/bash
    source /home/oracle/.bash_profile
    echo 'Begin expdp at '`date "+%F %H:%M:%S"`
    NOWTIME=`date +%Y%m%d_%H%M%S`
    BEFOREDAY=`date -d "-7 day" +%Y%m%d`
    
    cd /home/oradata/xdump
    
    expdp <username>/<password> parfile=xdump.par 
    
    if test -e /home/oradata/xdump/dsdb_data.dump ; then
      cd /home/oradata/xdump
      mv dsdb_data.dump dsdb_data_${NOWTIME}.dump
      mv dsdb_data.log dsdb_data_${NOWTIME}.log
      dump_num=`ls -ltr | grep dsdb_data_ | grep .dump | awk 'END{print NR}'`
      if test $dump_num -ge 28 ; then
        rm dsdb_data_${BEFOREDAY}*.dump
        rm dsdb_data_${BEFOREDAY}*.log
      fi
    fi
    
    expdp \'/ as sysdba\' directory=xdump dumpfile=dsdb_metadata.dump logfile=dsdb_metadata.log schemas=<schema_name> content=METADATA_ONLY
    
    if test -e /home/oradata/xdump/dsdb_metadata.dump ; then
      cd /home/oradata/xdump
      mv dsdb_metadata.dump dsdb_metadata_${NOWTIME}.dump
      mv dsdb_metadata.log dsdb_metadata_${NOWTIME}.log
      dump_num=`ls -ltr | grep dsdb_metadata_ | grep .dump | awk 'END{print NR}'`
      if test $dump_num -ge 28 ; then
        rm dsdb_metadata_${BEFOREDAY}*.dump
        rm dsdb_metadata_${BEFOREDAY}*.log
      fi
    fi
    
    echo 'End expdp at '`date "+%F %H:%M:%S"`
    ###xdump.sh>>>
    
  2. 备份设置

    su - oracle
    #测试脚本
    /bin/bash /home/oradata/xdump/xdump.sh >> /home/oradata/xdump/xdump.log &
    
    # 定时任务 每天0、6、12、18点备份
    crontab -e
    ###crontab -e<<<
    0 0,6,12,18 * * * /bin/bash /home/oradata/xdump/xdump.sh >> /home/oradata/xdump/xdump.log &
    ###crontab -e>>>
    

# 问题1

重启后,实例没起来

cd /u01/oracle/product/11.2.0/db_1/network/admin/
vi listener.ora
###增加 开始###
SID_LIST_LISTENER = 
  (SID_LIST = 
    (SID_DESC = 
      (GLOBAL_DBNAME = 实例名) ##dsdb
      (SID_NAME = 实例名) ##dsdb
    )
   )
###结束####

# 问题2

tail -200f /u01/oracle/oraInventory/logs/silentInstall2020-03-16_11-03-11AM.log Error in invoking target 'agent nmhs' of makefile '/u01/oracle/product/11.2.0/db_1/sysman/lib/ins_emagent.mk'. See '/u01/oracle/oraInventory/logs/installActions2020-03-16_11-03-11AM.log' for details.

vi /u01/oracle/product/11.2.0/db_1/sysman/lib/ins_emagent.mk
####176行增加-lnnz11######
175 $(SYSMANBIN)emdctl:
   176         $(MK_EMAGENT_NMECTL)
###改成如下####
175 $(SYSMANBIN)emdctl:
   176         $(MK_EMAGENT_NMECTL) -lnnz11
##########

# 删除oracle

/u01/oracle/product/11.2.0/db_1/deinstall/deinstall